#ifndef FASYS_FASYS_SUBSCRIPTION_HPP
#define FASYS_FASYS_SUBSCRIPTION_HPP

#include "types.hpp"
#include "isubscriber.hpp"
#include <list>
namespace fasys{


class messages_channels;
class channels_container;

class subscription
{
public:
  /*
  std::string uuid;
  subscribe_id_t subscribe_id;
  // время жизни канала (с последнего подверждения подписки)
  time_t lifetime;
  // время смерти (now + lifetime)
  time_t death_time;
  */
  isubscriber* observer;
public:
  ~subscription();
  // создание подписки
  subscription(channels_container* cc);
  // move конструктор!!
  subscription(const subscription& s);
  // создать, обновить канал подписки 
  channel_id_t create(const std::string& channel, size_t min_size = 1, size_t max_size = 10 );
  // удалить канал подписки
  channel_id_t remove(const std::string& channel);
  // 
  void republish(const message& m);

  void move_messages(std::list<message>& ml);
private:
  mutable messages_channels* _messages;
  channels_container* _channels;
  //typedef std::set<channel_id_t> channel_id_set;
  /*// для запоминяния текущих каналов, для выгребания
  channel_id_set _channel_ids;
  */
};

}
#endif
